package pe.gob.servir.web.apps.censodirectivo.model.service;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;

import pe.gob.servir.apps.censodirectivo.ejb.service.UtilServiceRemote;
import pe.gob.servir.apps.censodirectivo.excepcion.ServiceExcepcion;
import pe.gob.servir.apps.censodirectivo.model.bean.MensajeRespuesta;
import pe.gob.servir.apps.censodirectivo.model.bean.OpcionCombo;
import pe.gob.servir.apps.censodirectivo.model.bean.Plantilla;
import pe.gob.servir.web.apps.censodirectivo.controller.util.JSFUtil;

@ManagedBean(name = "plantillaService")
@ViewScoped
public class PlantillaService implements Serializable {

	private Plantilla plantilla;
	private static final long serialVersionUID = 1L;

	private static final Logger log = Logger.getLogger(PlantillaService.class);
	
	@EJB(lookup="java:global/CensoDirectivosEJBEAR/CensoDirectivosEJB/UtilService!pe.gob.servir.apps.censodirectivo.ejb.service.UtilServiceRemote")
    private UtilServiceRemote utilServiceRemote;
	
	@ManagedProperty("#{loginService}")
	private LoginService loginService;
	
	private String cboCenso;
	private String cboTipoPlantilla;
	private String txtAsunto;
	private String txtCuerpo;
	
	public PlantillaService() {
		plantilla = new Plantilla();
	}
	
	@PostConstruct
	public void init(){
		cboCenso = "-1";
		cboTipoPlantilla = "-1";
		txtAsunto = null;
		txtCuerpo = null;
	}
	
	public ArrayList<SelectItem> getListaTipoPLantilla(){
    	List<OpcionCombo> lstCombo = utilServiceRemote.obtenerCombo("TIPO_PLANTILLA");
    	ArrayList<SelectItem> listaCombo = new ArrayList<SelectItem>();
    	SelectItem item;
    	for(OpcionCombo obj : lstCombo){
    		item = new SelectItem(obj.getId() , obj.getNombre());			
            listaCombo.add(item);
    	}
        return listaCombo;     	
	}
	
	
	public void ingresarPlantilla(){
		
		String sMensaje = "";		
		try{
			plantilla.setUsuarioCreador(loginService.getUsuario().getUsuario());
			plantilla.setCensoId(Long.valueOf(this.cboCenso));
			plantilla.setAsunto(this.txtAsunto);
			plantilla.setCuerpo(this.txtCuerpo);
			plantilla.setTipoPlantillaId(Long.valueOf(cboTipoPlantilla));
			
			MensajeRespuesta objMsj = utilServiceRemote.registrarPlantilla(plantilla);
			
			log.info("Mensaje:" + objMsj.getMensajeError());
			log.info("Codigo Mensaje:" + objMsj.getCodigoError());
			
			sMensaje = objMsj.getMensajeError();
			
			if (objMsj.getCodigoError().equals("-1")) {
				JSFUtil.addErrorMessage(sMensaje);//ERROR DAO "-1"
			}else{
				JSFUtil.addSuccessMessage(sMensaje);//Exito "0"	
			}
		} catch (ServiceExcepcion e) {
			JSFUtil.addErrorMessage(e.getMensajeError());//ERROR Service "-2"
			log.error(e.getMensajeError());
		}	
	}
	
	public void onCensoTipoPlantillaChange() {
		try{
			log.info("onCensoTipoPlantillaChange");
			//Inicializar variables
			this.txtAsunto = null;
			this.txtCuerpo = null;
						
			Plantilla objPlan = new Plantilla();
			
			if (cboCenso.equals("-1") || (cboTipoPlantilla.equals("-1") ))
				return;
			
			objPlan.setCensoId(Long.valueOf(this.cboCenso));
			objPlan.setTipoPlantillaId(Long.valueOf(this.cboTipoPlantilla));
			
			plantilla = utilServiceRemote.obtenerPlantilla(objPlan);
			
			if(plantilla != null){
				txtAsunto = plantilla.getAsunto();
				txtCuerpo = plantilla.getCuerpo();
			}
		}catch(ServiceExcepcion e){
			log.error(e.getMensajeError());
			JSFUtil.addErrorMessage(e.getMensajeError());
		}
	}

	public Plantilla getPlantilla() {
		return plantilla;
	}

	public void setPlantilla(Plantilla plantilla) {
		this.plantilla = plantilla;
	}
	
	public String getCboCenso() {
		return cboCenso;
	}

	public void setCboCenso(String cboCenso) {
		this.cboCenso = cboCenso;
	}

	public String getCboTipoPlantilla() {
		return cboTipoPlantilla;
	}

	public void setCboTipoPlantilla(String cboTipoPlantilla) {
		this.cboTipoPlantilla = cboTipoPlantilla;
	}

	public String getTxtAsunto() {
		return txtAsunto;
	}

	public void setTxtAsunto(String txtAsunto) {
		this.txtAsunto = txtAsunto;
	}

	public String getTxtCuerpo() {
		return txtCuerpo;
	}

	public void setTxtCuerpo(String txtCuerpo) {
		this.txtCuerpo = txtCuerpo;
	}

	public LoginService getLoginService() {
		return loginService;
	}

	public void setLoginService(LoginService loginService) {
		this.loginService = loginService;
	}
	
}
